package util

// app/common/result.go
type Result[T any] struct {
	Data  T     `json:"data"`
	Error error `json:"-"`
}

func Success[T any](data T) Result[T] {
	return Result[T]{Data: data}
}

func Failure[T any](err error) Result[T] {
	return Result[T]{Error: err}
}

func (r Result[T]) IsSuccess() bool {
	return r.Error == nil
}

// 链式操作支持
func (r Result[T]) Then(fn func(T) Result[T]) Result[T] {
	if r.IsSuccess() {
		return fn(r.Data)
	}
	return r
}
